#ifndef VIDEOMEETINGUI_H
#define VIDEOMEETINGUI_H

#include <QWidget>
#include <QMap>

//#include "../WebRTC/cwebsocket.h" // 需要 WebSocket 连接
#include "playimage.h"  // 视频显示控件
//#include "../Camera/readthread.h" // 本地摄像头读取线程

// 前置声明 Qt 控件类
class QVBoxLayout;
class QHBoxLayout;
class QScrollArea;
class QPushButton;
class QJsonObject; // 前置声明 JSON 类
class QByteArray;

extern "C"{
#include "libavutil/frame.h"
}

class VideoMeetingUI : public QWidget
{
    Q_OBJECT

public:
    // --- 修改: 移除 websocket 和 cameraDeviceName 参数 ---
    explicit VideoMeetingUI(const QString& roomId,
        int localUserId,
        const QString& localUserName,
        QWidget* parent = nullptr);

    ~VideoMeetingUI() override;

    // 公共接口，用于添加和删除用户（通常由 Janus 信令触发）
    Q_INVOKABLE void addUser(int userId, const QString& userName);
    Q_INVOKABLE void removeUser(int userId);

public slots:
    /**
     * @brief 更新指定远程用户的视频画面
     * @param userId 远程用户的 ID
     * @param frame 指向 AVFrame 的指针。注意：这是一个克隆出来的帧，此函数使用完毕后【会】调用 av_frame_free(&frame) 来释放！
     */
    void updateRemoteUserFrame(int userId, AVFrame* frame);

    /**
     * @brief 更新本地用户画面的公共槽 (由 Widget 连接到 CCamera::frameReady)
     * @param frame 指向 AVFrame 的指针。注意：这是一个克隆出来的帧，此函数使用完毕后【会】调用 av_frame_free(&frame) 来释放！
     */
    void onLocalFrameReady(AVFrame* frame);

signals:
    void closed(); // 界面关闭时发出信号

protected:
    void closeEvent(QCloseEvent *event) override; // 处理关闭事件

private slots:
    // 内部槽函数
    void onParticipantClicked(int userId);      // 处理参与者缩略图点击
    void onCameraControlButtonClicked();        // 处理摄像头开关按钮点击
    void onMicControlButtonClicked();           // 处理麦克风开关按钮点击
    void onShareScreenControlButtonClicked();   // 处理屏幕共享按钮点击
    void onChatControlButtonClicked();          // 处理聊天按钮点击

private:
    void setupUi();                             // 初始化界面布局
    void setMainView(int userId);               // 将指定用户设置为主画面
    void updateParticipantListOrder();          // 更新左侧列表顺序 (确保本地在最上面)

    // UI 元素
    QHBoxLayout* m_mainLayout = nullptr;
    QVBoxLayout* m_participantListLayout = nullptr; // 左侧列表布局
    QWidget* m_participantListWidget = nullptr;     // 左侧列表的容器 Widget
    QScrollArea* m_participantScrollArea = nullptr; // 左侧滚动区域
    QVBoxLayout* m_rightAreaLayout = nullptr;       // 右侧区域布局
    QWidget* m_mainViewContainer = nullptr;         // 主视频视图的容器
    QHBoxLayout* m_controlButtonLayout = nullptr;   // 底部按钮布局
    QPushButton* m_cameraButton = nullptr;
    QPushButton* m_micButton = nullptr;
    QPushButton* m_shareButton = nullptr;
    QPushButton* m_chatButton = nullptr;

    // 数据和逻辑
    PlayImage* m_localPlayImage = nullptr;      // 本地视频显示控件
    PlayImage* m_mainViewPlayImage = nullptr;   // 当前在主视图中显示的控件
    QMap<int, PlayImage*> m_participants;       // 存储远程参与者的 PlayImage (User ID -> PlayImage*)
    int m_localUserId = -1;
    QString m_localUserName;
    QString m_roomId;
    int m_mainViewUserId = -1;                  // 当前主视图显示的用户 ID (-1 表示无)

    // 状态变量
    bool m_isCameraOn = true;
    bool m_isMicOn = true;

};

#endif // VIDEOMEETINGUI_H
